package qdu.szmt.test_sqlite;

import android.annotation.SuppressLint;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.annotation.Nullable;

public class MyDB_adapter {
    private static final String DB_NAME = "people2.db";
    private static final int DB_VERSION = 1;
    private static final String TB_NAME1 = "peopleinfo";

    public static final String KEY_ID = "_id";
    //sqlite中主键默认名称为 _id
    public static final String KEY_NAME = "name";
    public static final String KEY_AGE = "age";
    public static final String KEY_HEIGHT = "height";
    /**
     * 1. 数据库基本信息，包括文件名、表名称、列名称等
     *
     * 2. 定义一个SQLiteOpenHelper帮助类的子类,并创建其对象
     *    2.1 需要定义构造并给super（）传参
     *      参数1：当前对象所依附的安卓组件
     *      参数2：数据库文件名
     *      参数3：游标工具，一般传null，表示使用默认的Cursor
     *      参数4: 数据库版本
     *    2.2 需要重写onCreate和onUpgrade两个函数
     *      oncreate在创建数据库文件时回调一次，之后连接数据库时若该文件已经存在就不再回调
     *      一般在oncreate函数中建表,使用 execSQL函数
     *      onupgrade，在数据库版本更新时调用，即2.1中参数4的值与旧值不等时回调
     *
     * 3. 创建数据库文件并连接数据库
     *    使用2中的数据库帮助类对象的成员函数getWritableDatabase/getReadableDatabase
     *    来实现数据库文件的创建和连接（如果数据库文件已存在，直接连接）
     *    连接函数的返回值都是 SQLiteDatabase, 数据库类型的对象，负责增删改查
     *
     * 4. 查询操作通过query函数
     *    参数1： 表名； 参数2： 要查询的列名称，null表示全部列
     *    参数3： 对应where语句的值 例如 id=3
     *    参数4： 对应参数3中用？标识的值.
     *           例如select * from table where name=? and age=?;
     *            参数4为{x, y}
     *
     * 5. query函数返回的Cursor的操作
     *    初始指向第一个记录之前，moveToFirst
     *    getcount、 movetonext
     *    getInt(?)/ getstring(?)/ getfloat(?)..... 取当前行对应列的值 ?:列号
     *
     * */
    Context c;
    Myhelper myhelper;
    SQLiteDatabase db;
    MyDB_adapter(Context c){
        this.c = c;

    }

    class Myhelper extends SQLiteOpenHelper{

        public Myhelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
            super(context, name, factory, version);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            /*
            create table peopleinfo(
                _id integer primary key autoincrement,
                name text not null,
                age integer,
                height float
            );
             */
            String sql = "create table " + TB_NAME1 + " ( "
                    + KEY_ID + " integer primary key autoincrement,"
                    + KEY_NAME + " text not null,"
                    + KEY_AGE + " integer,"
                    + KEY_HEIGHT + " float);";
            if(db != null && db.isOpen()){
                db.execSQL(sql);
            }
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        }
    }

    public void open(){
        myhelper = new Myhelper(c, DB_NAME, null, 1);
        try {
            db = myhelper.getWritableDatabase();
        }catch (SQLiteException e){
            try {
                db = myhelper.getReadableDatabase();
            }catch(SQLiteException e2){
                //连接失败
            }
        }
    }
    @SuppressLint("Range")
    public String getall(){
        String result = "";
        Cursor c = null;
        if(db != null && db.isOpen()){
            c = db.query(TB_NAME1, null, null, null, null, null, null);
            if(c !=null && c.getCount() > 0){
                c.moveToFirst();
                do{
                    result += c.getInt(0) + ": "
                            + c.getString(c.getColumnIndex(KEY_NAME)) + ", "
                            + c.getInt(c.getColumnIndex(KEY_AGE)) + ", "
                            + c.getFloat(c.getColumnIndex(KEY_HEIGHT)) + "\n";
                }while(c.moveToNext());

            }else{
                result = "空表";
            }
        }

        return result;
    }
    public void closedb(){
        if(db != null && db.isOpen()){
            db.close();
            db = null;
            //myhelper = null;
        }
    }
    /**
     * mydbadp.open
     * get
     * delete
     * set
     * .close
     */
}
